package projeto;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class LivroTest {
	
	private Livro livro1, livro2, livro3;
	private Sala sala1, sala2;
	
	@Before
	public void criaObjetos() throws Exception {
		sala1 = new Sala("CX", 202);
		sala2 = new Sala("CA", 101);
		
		
		livro1 = new Livro("Calculo", "Thomas", "Livro de Calculo", sala1);
		livro2 = new Livro("Java e OO", "Deitel", "Livro de Java", sala2);
		livro3 = new Livro("Linear", "Murilo", "Livro de Linear", sala1);
		
	}
	
	@Test
	public void testaCriacaoDoLivro(){
		
		try{
			sala1 = new Sala("CX", 202);
    		new Livro(null, "James Stewart", "Um dos melhores livros sobre calculo, usado como base nas melhores universidades do país", sala1);
    		Assert.fail("Nome Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Nome Invalido", e.getMessage());
    	}
		
		try{
			sala1 = new Sala("CX", 202);
    		new Livro("", "James Stewart", "Um dos melhores livros sobre calculo, usado como base nas melhores universidades do país", sala1 );
    		Assert.fail("Nome Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Nome Invalido", e.getMessage());
    	}
		
		try{
			sala1 = new Sala("CX", 202);
    		new Livro("Use a cabeça Java", null, "'Use a Cabeça Java' é uma experiência completa de aprendizado em programação orientada a objetos (OO) e Java", sala1);
    		Assert.fail("Autor Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Autor Invalido", e.getMessage());
    	}
		
		try{
			sala1 = new Sala("CX", 202);
    		new Livro("Use a cabeça Java", "", "'Use a Cabeça Java' é uma experiência completa de aprendizado em programação orientada a objetos (OO) e Java", sala1);
    		Assert.fail("Autor Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Autor Invalido", e.getMessage());
    	}
		
		try{
			sala1 = new Sala("CX", 202);
    		new Livro("Fundamentos de Física 1 - Mecânica", "Halliday", null, sala1);
    		Assert.fail("Descricao Invalida");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Descricao Invalida", e.getMessage());
    	}
		
		try{
			sala1 = new Sala("CX", 202);
    		new Livro("Fundamentos de Física 1 - Mecânica", "Halliday", "", sala1);
    		Assert.fail("Descricao Invalida");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Descricao Invalida", e.getMessage());
    	}
		
		try{
			sala1 = new Sala("CX", 202);
    		new Livro("Matemática Discreta para Computação e Informática", " Paulo Blauth Menezes", "Os principais conceitos de matemática discreta em uma linguagem simples e acessível", null);
    		Assert.fail("Tema Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Tema Invalido", e.getMessage());
    	}
		
		try{
			sala1 = new Sala("CX", 202);
    		new Livro("Matemática Discreta para Computação e Informática", " Paulo Blauth Menezes", "Os principais conceitos de matemática discreta em uma linguagem simples e acessível", sala1);
    		Assert.fail("Tema Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Tema Invalido", e.getMessage());
    	}
		
		try{
			sala1 = new Sala("CX", 202);
    		new Livro("Matemática Discreta para Computação e Informática", " Paulo Blauth Menezes", "Os principais conceitos de matemática discreta em uma linguagem simples e acessível", null);
    		Assert.fail("Dono do livro Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Dono do livro Invalido", e.getMessage());
    	}
		
		try{
			sala1 = new Sala("CX", 202);
    		new Livro("Matemática Discreta para Computação e Informática", " Paulo Blauth Menezes", "Os principais conceitos de matemática discreta em uma linguagem simples e acessível", sala1);
    		Assert.fail("Dono do livro Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Dono do livro Invalido", e.getMessage());
    	}
		try{
			
    		new Livro("Matemática Discreta para Computação e Informática", " Paulo Blauth Menezes", "Os principais conceitos de matemática discreta em uma linguagem simples e acessível", null);
    		Assert.fail("Localizacao Inexistente");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Localizacao Inexistente", e.getMessage());
    	}
		try{
			sala1 = new Sala("CX", 202);
    		new Livro("Matemática Discreta para Computação e Informática", " Paulo Blauth Menezes", "Os principais conceitos de matemática discreta em uma linguagem simples e acessível", sala1);
    		Assert.fail("Id Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Id invalido", e.getMessage());
    	}
		try{
			sala1 = new Sala("CX", 202);
    		new Livro("Matemática Discreta para Computação e Informática", " Paulo Blauth Menezes", "Os principais conceitos de matemática discreta em uma linguagem simples e acessível", sala1);
    		Assert.fail("Id Invalido");
    	}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Id invalido", e.getMessage());
    	}
	}
	
	
	@Test
	public void testaSetEGetsDeNome() throws Exception{
		
		Assert.assertEquals(livro1.getNome(),"Calculo");
		livro1.setNome("Calculo I");
		Assert.assertEquals(livro1.getNome(),"Calculo I");
		
	}
	
	
	@Test
	public void testaSetEGetsDeAutor() throws Exception{
		
		Assert.assertEquals(livro2.getAutor(),"Deitel");
		livro2.setAutor("Sierra");
		Assert.assertEquals(livro2.getAutor(),"Sierra");
	}
	
	@Test
	public void testaSetEGetsDeDescricao() throws Exception{
	
		Assert.assertEquals(livro3.getDescricao(), "Livro de Linear");
		livro3.setDescricao("Aplicacoes Lineares");
		Assert.assertEquals(livro3.getDescricao(), "Aplicacoes Lineares");
		
	}
	
	@Test
	public void testaSetEGetsDeTema() throws Exception{
		
		Assert.assertEquals(livro1.getTema(), "Aplicacoes Matematicas");
		livro1.setTema("Matematica Discreta");
		Assert.assertEquals(livro1.getTema(), "Matematica Discreta");
		
	}
	
	@Test
	public void testaSetEGetsDoDono() throws Exception{
		
		Assert.assertEquals(livro1.getDono(), "Paulo");
		livro1.setDono("Alisson");
		Assert.assertEquals(livro1.getDono(), "Alisson");
	}
	
	@Test
	public void testaSetEGetsDaLocalizacao() throws Exception{
		Assert.assertEquals(livro1.getLocalizacao(), sala1);
		livro1.setLocalizacao(sala2);
		Assert.assertEquals(livro1.getLocalizacao(), sala2);
		
		Assert.assertEquals(livro2.getLocalizacao(), sala2);
		livro2.setLocalizacao(sala1);
		Assert.assertEquals(livro2.getLocalizacao(), sala1);
		
		Assert.assertEquals(livro3.getLocalizacao(), sala1);
		livro3.setLocalizacao(sala2);
		Assert.assertEquals(livro3.getLocalizacao(), sala2);
	}
	
	@Test
	public void testaSetEGetsId() throws Exception{
		Assert.assertTrue(livro1.getId() == "0001");
		livro1.setId("0002");
		Assert.assertTrue(livro1.getId() == "0002");
		Assert.assertEquals(livro1.getId(), livro2.getId());
		
		Assert.assertTrue(livro2.getId() == "0002");
		livro2.setId("00000");
		Assert.assertTrue(livro2.getId() == "00000");
		
		Assert.assertTrue(livro3.getId() == "0003");
		livro3.setId("3030");
		Assert.assertTrue(livro3.getId() == "3030");
	}
	
	
	
	
	
}